package com.cskaoyan.javase.homework.day15;

import java.io.File;

/**
 * @description: File练习题-递归删除文件夹
 * @author: wuguidong@cskaoyan.onaliyun.com
 **/

public class Work3 {
    public static void main(String[] args) {
        File file = new File("E:\\123");
        System.out.println("开始删除目标目录: ");
        System.out.println("目录是否存在? " + file.exists());
        System.out.println("是否已经删完? " + deleteDirectory(file));
        System.out.println(file.exists());
    }

    public static boolean deleteDirectory(File target) {
        //获取目标目录下的所有文件的file对象
        File[] files = target.listFiles();
        if (files == null || files.length == 0) {
            //如果传入的target对象是一个文件或者是一个空目录，直接删除
            if (target.isFile() && target.delete()) System.out.println("已删除文件: " + target.getName());
            else if (target.isDirectory() && target.delete()) System.out.println("已删除空目录：" + target.getName());
                //不是文件也不是目录，肯定是非法目录，目录不存在
            else {
                System.out.println("目录不存在!");
                return false;
            }
        }
        //如果代码执行到这里，说明传入的target对象是一个不能空的目录
        //需要先删除目录下的所有文件,才能删除该目录
        //遍历这个File对象数组 遍历中无需下标 所以可以用增强for
        for (File file : files) {
            if (file.isDirectory()) {
                //该file对象是一个目录,需要递归删除(当然这里可以加一个判断是空目录,也可以不判断,直接递归删除)
                System.out.println("已进入目录：" + file.getName());
                deleteDirectory(file);
            } else {
                //该file对象是一个文件,直接删除
                file.delete();
                System.out.println("已删除文件："+file.getName());
            }
        }
        //代码执行到这里,遍历结束了,target目录内容已经删完了,只需要删除target目录即可
        //target目录此时已经是空目录了
        //这里也可以算是递归的出口
        return target.delete();
    }
}
